#ifndef DAP_MAIN_H
#define DAP_MAIN_H
#include "usbd_core.h"
#include "usbd_cdc.h"
#include "usbd_msc.h"
#include "DAP_config.h"
#include "DAP.h"
#include "usbip_defs.h"




#ifdef __cplusplus
extern "C" {
#endif
// 
#define DAP_BUFFER_NUM 10
//
#define USE_WINUSB 1
// 计算DAP处理单元的大小，即DapPacket_t结构体的大小
#define DAP_HANDLE_SIZE DAP_PACKET_SIZE

#define DAP_BUFFER_SIZE (DAP_PACKET_SIZE * DAP_BUFFER_NUM)

typedef struct {
    // 定义输入数据环形缓冲区句柄，用于存储接收到的DAP数据
     RingbufHandle_t dap_dataIN_handle ;
    // 定义输出数据环形缓冲区句柄，用于存储处理后待发送的DAP数据
     RingbufHandle_t dap_dataOUT_handle;
    // 定义数据响应互斥量句柄，用于保护对dap_respond变量的访问
    SemaphoreHandle_t data_response_mux;
    // DAP任务句柄变量，用于通知DAP处理线程进行处理
    TaskHandle_t kDAPTaskHandle;
    //char buf[DAP_PACKET_SIZE];//主机用于usb接收数据的缓存
} DAP_config_t, *pDAP_config_t;

//     typedef struct
// {
//     uint32_t length;              // 数据长度
//     uint8_t buf[DAP_PACKET_SIZE]; // 数据缓冲区
// } DapPacket_t;
typedef enum {
    NO_SIGNAL = 0,     //无信号
    RESET_HANDLE = 1,  //复位
    DELETE_HANDLE = 2, //删除
} reset_handle_t;

extern DAP_config_t g_DAP_config;

/*                 function prototypes                 */
pDAP_config_t DAP_Pubilc_Init(void);
void DAP_Pubilc_Deinit(pDAP_config_t pDAP_config);


int fast_reply(uint8_t *buf, uint32_t length, int dap_req_num);
void handle_dap_unlink();
void handle_dap_data_request(usbip_stage2_header *header, uint32_t length);
#ifdef __cplusplus
}
#endif

#endif